package com.hemi.rhet;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.drawable.BitmapDrawable;
import android.view.Display;
import android.view.KeyEvent;
import android.view.View;
import android.view.WindowManager;

public class PictureReview extends View implements Runnable{


	//声明Bitmap对象
	Bitmap mBitQQ = null;
	int    BitQQwidth = 0;
	int    BitQQheight = 0;
	
	float	Angle = 0f;
	Context context =null;
	//构建Matrix对象
	Matrix mMatrix = new Matrix();
	public PictureReview(Context context) {
		super(context);
		this.context =context;
		//装载资源
		mBitQQ = ((BitmapDrawable)getResources().getDrawable(R.drawable.login_back_ground)).getBitmap();
		
		//得到图片的高度和宽度
		BitQQwidth = mBitQQ.getWidth();
		BitQQheight = mBitQQ.getHeight();
		
		//开启线程
		new Thread(this).start();
	}
	
	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		//重置mMatrix对象
		mMatrix.reset();
		
		//设置旋转
		mMatrix.setRotate(Angle);
		
		//按mMatrix的旋转构建一个新的Bitmap  这里给大家说一下这几个参数 搞的我比较郁闷了
		/*第一个参数不说了
		 * 第二个 帮助文档翻译过来 是第一个像素源的 X坐标 我不知道是咋回事，如果哪位大哥知道还请给小弟留言
		 * 这里要提醒大家一下 就是 第二个参数 和第三个参数 0,0 这2个参数 必须 我写一个式子吧
		 * 0+mBitQQ.getWidt() <= Bitmap.width
		 * 0+mBitQQ.getHeight() <= Bitmap.height  大家仔细看看 所以这2个参数我觉得只能写0虽然我不知道
		 * 这2个参数到底用来决定什么。 如果大家谁知道 留言啊 谢谢。 如果不遵守那个式子就会有异常 大家可以看一看此方法的源码 或者自己试试
		 * 第三个参数和第二个表达意思一样
		 * 第四个参数可以理解为宽度
		 * 第五个参数可以理解为高度
		 * 第六个参数矩阵对象
		 * 第七个参数 我也不知道是干嘛的 但是 设置为true之后，图片的旋转的过程中 不会失真，就是字会看不清楚。
		 * 大家可以下载源码试试  这个参数 建议还是设置为true吧。
		 * */
		Bitmap mBitQQ2 = Bitmap.createBitmap(mBitQQ, 0, 0, BitQQwidth, BitQQheight, mMatrix, true);
		WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
		Display display = wm.getDefaultDisplay(); 
		int iwidht = display.getWidth();
		int height = display.getHeight();
		int wd = (iwidht-BitQQwidth)/2;
		wd=wd>0?wd:0;
		int wh = (height-BitQQheight)/2;
		wh=wh>0?wh:0;
		//绘制旋转后的图片
		PictureReview.drawImage(canvas, mBitQQ2,wd , wh);
		mBitQQ2 = null;
	}
	
	//按键按下事件
	public boolean onKeyDown(int keyCode, KeyEvent event){
		//左方向键
		if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
			Angle = Angle+90f;
		}else if(keyCode == KeyEvent.KEYCODE_DPAD_RIGHT){
			Angle =Angle+90f;
		}
		return true;
	}
	
	//按键弹起事件
	public boolean onKeyUp(int keyCode, KeyEvent event){
		return true;
	}
	
	public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event){
		return true;
	}
	//线程处理
	public void run() {
		while (!Thread.currentThread().isInterrupted()) {
			try {
				Thread.sleep(100);
			} catch (Exception e) {
				Thread.currentThread().interrupt();
			}
			postInvalidate();
		}
	}
	
	/**
	 * 绘制一个Bitmap
	 * @param	canvas	画布
	 * @param 	bitmap	图片
	 * @param	x		屏幕上的x坐标
	 * @param   y 		屏幕上的y坐标
	 * */
	public static void drawImage(Canvas canvas, Bitmap bitmap, int x ,int y){
		//绘制图像
		canvas.drawBitmap(bitmap, x, y, null);
	}
	
}

